www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouS\ScreenCtrl.cpp
// ScreenCtrl.cpp: implementation of the ScreenCtrl class. // Download by http://www.NewXing.com ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "ScreenCtrl.h" #include "command.h" #include "peersocket.h" #include "capturescreen.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// bool PeerScreenMouseKey(SOCKET s,WSAEVENT hEvent) { DWORD retLen; KEYMOUSE keymouse; while(1) { //////////取得鼠标键盘值/////////// if(!PeerRecvDataS(s,(char*)&keymouse,sizeof(keymouse),&retLen, hEvent,SENDRECV_TIMEOUT)) { return false; } switch(keymouse.style) { case PEER_MOUSE_LEFTDOWN: mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN,keymouse.x,keymouse.y,0,0); break; case PEER_MOUSE_LEFTUP: mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP,keymouse.x,keymouse.y,0,0); break; case PEER_MOUSE_RIGHTDOWN: mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTDOWN,keymouse.x,keymouse.y,0,0); break; case PEER_MOUSE_RIGHTUP: mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTUP,keymouse.x,keymouse.y,0,0); break; case PEER_MOUSE_MIDDLEDOWN: mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEDOWN,keymouse.x,keymouse.y,0,0); break; case PEER_MOUSE_MIDDLEUP: mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEUP,keymouse.x,keymouse.y,0,0); break; case PEER_MOUSE_LDBCLICK: mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN,keymouse.x,keymouse.y,0,0); mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP,keymouse.x,keymouse.y,0,0); mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTDOWN,keymouse.x,keymouse.y,0,0); mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_LEFTUP,keymouse.x,keymouse.y,0,0); break; case PEER_MOUSE_RDBCLICK: mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTDOWN,keymouse.x,keymouse.y,0,0); mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTUP,keymouse.x,keymouse.y,0,0); mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTDOWN,keymouse.x,keymouse.y,0,0); mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTUP,keymouse.x,keymouse.y,0,0); break; case PEER_MOUSE_MDBCLICK: mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEDOWN,keymouse.x,keymouse.y,0,0); mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEUP,keymouse.x,keymouse.y,0,0); mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEDOWN,keymouse.x,keymouse.y,0,0); mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MIDDLEUP,keymouse.x,keymouse.y,0,0); break; case PEER_MOUSE_MOVE: mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE,keymouse.x,keymouse.y,0,0); break; case PEER_KEY_DOWN: keybd_event(keymouse.nkey,0,KEYEVENTF_EXTENDEDKEY,0); break; case PEER_KEY_UP: keybd_event(keymouse.nkey,0,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0); break; } } return true; } /////////////////截取屏幕///////////////// bool PeerScreenGet(SOCKET s,WSAEVENT hEvent) { DWORD retLen; SCREEN screen; //////////屏幕/////////// while(1) { if(!PeerRecvDataS(s,(char*)&screen,sizeof(screen),&retLen, hEvent,SENDRECV_TIMEOUT)) { return false; } if(screen.BmpSize==10000) ///客户端已经退出 break; EnterCriticalSection(&csCaptureScreen); if(!GetScreenData(8)) { LeaveCriticalSection(&csCaptureScreen); return false; } screen.BmpSize=dwBmpSize; screen.BmpInfoSize=dwBmpInfoSize; screen.BmpCX=iBmpCX; screen.BmpCY=iBmpCY; if(!PeerSendDataS(s,(char*)&screen,sizeof(screen),&retLen, hEvent,SENDRECV_TIMEOUT)) { LeaveCriticalSection(&csCaptureScreen); return false; } if(!PeerSendDataS(s,(char*)lpBmpData,dwBmpSize,&retLen, hEvent,SENDRECV_TIMEOUT)) { LeaveCriticalSection(&csCaptureScreen); return false; } LeaveCriticalSection(&csCaptureScreen); } return true; } /////写屏幕/////////// bool PeerScreenWrite(SOCKET s,WSAEVENT hEvent) { DWORD retLen; FONTTEXT ftext; HDC hScrDC; // HWND deskwnd,listwnd; // SystemParametersInfo(SPI_SETWORKAREA,NULL,NULL,SPIF_SENDCHANGE); if(!PeerRecvDataS(s,(char*)&ftext,sizeof(ftext),&retLen, hEvent,SENDRECV_TIMEOUT)) { return false; } // deskwnd=GetDesktopWindow(); // if(deskwnd) // { // char classname[50]; // int ret; // for (listwnd = ::GetTopWindow(deskwnd); listwnd != NULL; // listwnd = ::GetNextWindow(listwnd, GW_HWNDNEXT)) // { // if(!(ret=GetClassName(listwnd,classname,50))) // break; // classname[ret]=0; // if(!strcmp(classname,"SysListView32")) // { // InvalidateRect(listwnd,NULL,true); // MessageBox(NULL,"dkdk","dkdk",MB_OK); // break; // // } // } // } hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); int xScrn,yScrn; xScrn = GetDeviceCaps(hScrDC, HORZRES); yScrn = GetDeviceCaps(hScrDC, VERTRES); RECT rect; rect.left=10;rect.top=10;rect.bottom=yScrn-10;rect.right=xScrn-10; HFONT font,oldfont; font=CreateFontIndirect(&ftext.logfont); oldfont=(HFONT)SelectObject(hScrDC,font); SetTextColor(hScrDC,ftext.color); SetBkMode(hScrDC,TRANSPARENT); DrawText(hScrDC,ftext.text,ftext.textcount,&rect,DT_CENTER); SelectObject(hScrDC,oldfont); DeleteObject(font); DeleteDC(hScrDC); return true; }